﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Boa.AIT.AccesoDatos.Contratos;
using Boa.AIT.AccesoDatos.Entidades.DTO;
using Didsoft.AccesoUsuario.AccesoDatos.Entidades;
using Didsoft.AccesoUsuario.Negocios;

namespace Boa.AIT.Negocios
{
    public class BOAPersonalNegocios
    {

        private IDtoBOAPersonal accesoDatos = DataFactory.Current.GetBOAPersonalAccesoDatos();

        public DtoBOAPersonal BuscarUsuario(string usuario, string contrasena)
        {
            return accesoDatos.BuscarUsuario(usuario, contrasena);
        }


        /// <summary>
        /// si no existe el usuario, guardar como nuevo en base a BOAPersonal
        /// </summary>
        /// <param name="personaBOA"></param>
        /// <returns></returns>
        public DUA_Usuario GuardarPersonaUsuario(DtoBOAPersonal personaBOA)
        {
            accesoDatos.BeginTransaction();
            try
            {
                DUA_Persona persona = new DUA_Persona();
                persona.Nombre = personaBOA.EmpleadoNombre;
                persona.ApellidoPaterno = personaBOA.EmpleadoApellidoPaterno;
                persona.ApellidoMaterno = personaBOA.EmpleadoApellidoMaterno;
                persona.GUID = System.Guid.NewGuid().ToString();
                persona.Lenguaje = "es-ES";
                persona.Genero = "M";
                persona.FechaNacimiento = DateTime.Now;
                persona.CIEmitidoEn = "LP";
                persona.CedulaIdentidad = "123456";

                DUA_PersonaNegocios personaNegocios = new DUA_PersonaNegocios();
                personaNegocios.Guardar(persona);


                DUA_RolNegocios rol_negocios = new DUA_RolNegocios();
                DUA_Rol rol = rol_negocios.ObtenerPorGuid("18EEC390-C9A7-4C74-9463-9D17C3DD526C");
                if (rol == null)
                {
                    rol = new DUA_Rol();
                    rol.Nombre = "BOA Personal";
                    rol.Descripcion = "Usuarios del Personal de BOA";
                    rol.ObtenerImagenDeBD = false;
                    rol.Predeterminado = true;
                    rol.GUID = "18EEC390-C9A7-4C74-9463-9D17C3DD526C";

                    rol_negocios.Guardar(rol);
                }

                DUA_Usuario usuario = new DUA_Usuario();
                usuario.Nombre = personaBOA.UsuarioNombre;
                usuario.Contrasena = personaBOA.UsuarioPassword;
                usuario.Bloqueado = false;
                usuario.Persona = persona;
                usuario.UltimoAcceso = DateTime.Now;
                usuario.PreguntaSeguridad = string.Empty;
                usuario.RespuestaSeguridad = string.Empty;
                usuario.Rol = rol;

                DUA_UsuarioNegocios usuarioNegocios = new DUA_UsuarioNegocios();
                usuarioNegocios.Guardar(usuario);

                accesoDatos.CommitTransaction();

                return usuario;

            }
            catch (Exception ex)
            {
                accesoDatos.RollbackTransaction();
                throw ex;
            }

        }

        /// <summary>
        /// devuelve todos los empleados de la base de datos Personal de BOA
        /// </summary>
        /// <returns></returns>
        public List<DtoBOAPersonal> GetTodoPersonalBoa()
        {
            return accesoDatos.TodoPersonalBoa().ToList();
        }




        public DtoBOAPersonal Seleccionar(int PersonalSeleccionado)
        {
            return accesoDatos.BuscarPorId(PersonalSeleccionado);
        }

        public List<DtoBOAPersonal> BuscarPorFiltro(string filtro)
        {
            var resultado = accesoDatos.TodoPersonalBoa();
            return resultado.Where(p => p.EmpleadoApellidoPaterno.StartsWith(filtro, StringComparison.OrdinalIgnoreCase)).ToList();
            //return accesoDatos.TodoPersonalBoa().Where(p => p.EmpleadoApellidoPaterno.Contains(filtro) || 
            //                                                p.EmpleadoApellidoMaterno.Contains(filtro) || 
            //                                                p.EmpleadoNombre.Contains(filtro)).ToList();
        }
    }
}
